_Pragma("once")
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#define FOURTABLENUM 4

#include <QMainWindow>
#include <QMenu>
#include <QListWidgetItem>
#include <QMessageBox>
#include <QLabel>
// 数据库
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>
#include <QVector>

#include "taskitem.h"

#include <QStringListModel>
#include <QStringList>
#include <QMenu>
#include <QString>
#include <QListWidgetItem>

#include <QDateTime>

#include <QTableWidget>
#include <QTableWidgetItem>

#include "tasktable.h"


#include "nexttodotable.h"
#include <QTimer>

#include "tasktimer.h"

#include "subtasktable.h"

#include "createtask.h"

#include "addsubtaskw.h"

#include "configfile.h"

#include <QFileDialog>

#include "settings.h"

#include <QSystemTrayIcon>

#include <QTextCodec>

#include <QDebug>

#include "updater.h"

#include "abstracttable.h"

#include "note.h"

#include "overviewchart.h"
#include <QWindowList>
#include <QWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

using timeVec = QPair<QTime, QTime>;
using timeVecs = QVector<timeVec>;


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    QMenu *m_topMenu;


    static QString version;
    static QString ApplicationName;

    // 任务列表
//    QVector<taskItem> tasks;
//    QMap<int, taskItem*> taskItem::all_tasks;

    // 四象限表格
    taskTable *(*m_tables);

    // next to do table list
    nextToDoTable *m_next_to_do_table;

    // 番茄总数
    static int totalTomatoes;

    // taskTimer
    taskTimer *m_task_timer;
    // 当前任务
    taskItem *m_currentTask;

    // 子任务表
    subTaskTable *m_sub_task_table;

    // 配置信息
    configInfo *m_config;

    // 更新
    Updater *m_updater;

    // 笔记
    Notes *m_note;








void InitWidget();

void InitDataBase(QString dbName);

void InitTableMenu();

bool isTableExist(QString table);
void createTaskTable(QString table);

void loadTaskItem();

void taskListAddTask(taskItem &task);
void taskListUpdateTask(taskItem &task);

void TableAddTask(taskItem &task);
void TableUpdateTask(taskItem &task);
void TableRemoveTask(int sort, int row);
void TableRemoveTask_fromID(int id);

void TableRemoveTask_todolist(int row);
void TableRemoveTask_todolist_fromID(int id);
// tableWidget 显示操作

void showData();

void windowUpdateTaskTomato(taskItem &task);
void showCurrentTask(taskItem &task);
void timerEnd(timeVecs *ptime_vesc);

void DataBaseOpenError();

void initCurrentTaskW();
void initFourQuadrantTable();
void initTaskTimer();
void initNextToDoTable();
void initSubTaskTable();
void initTrayIcon();


void showCurrentSubTask(const subTask &subtask);

void doNextTask();

void showWindow();

void taskLog(timeVecs *time_vecs, bool isRest=false);

void showYesterdayPie();

// 隐藏所有窗口
void hideAllWindows();
// 显示所有窗口
void showAllWindows();

// 获取当前任务的笔记


private slots:


    void on_nextDoTableList_cellDoubleClicked(int row, int column);

    // 定时器


    void on_startTimerBtn_clicked();

    void on_pauseTimerBtn_clicked();

    void on_resetTimerBtn_clicked();

    void on_subTaskTable_cellDoubleClicked(int row, int column);

    void connect_subTable_subLabel(QTableWidgetItem *item);

    void addNewSubTaskFromW(int row, subTask subtask);

    void on_state_switch_clicked();

    void detected_taskItem_change(taskItem &task);

    void update_settings();

    void TrayIconAction(QSystemTrayIcon::ActivationReason);

    void trayQuit();

    void checkUpdate();

    void on_customContextMenuRequested(const QPoint &pos);

    void openOverviewCharts();

private:
    Ui::MainWindow *ui;
    QSystemTrayIcon *m_trayIcon;

protected:
    void hideEvent(QHideEvent *event);
    void closeEvent(QCloseEvent *event);

signals:
    void ApplicationQuit();

private:


};



#endif // MAINWINDOW_H
